package models;


import java.util.*;

import javax.persistence.*;
import javax.validation.Constraint;

import play.templates.*;
import play.data.validation.Constraints.Required;
import play.db.ebean.Model;

@Entity
public class Post extends Model{

		@Required
		public  String  titre;
		public Date datepost;		
		/* 
		 *  @Lob pour dire au module JPA, qu'on va stocker une grosse quantité de text. 
		 */		
		@Lob
		public String contenu;
		/*
		 *  @ManyToOne , c'est pour dire qu'un auteur peut avoir plusiers post , mais un post ne peut être posté que par un seul user.
		 */
		@ManyToOne
		public User auteur;
		
		/*  Un post peut avoir plusieurs commentaires 
		 *  MappedBy c'est pour dire au JPA que c 'est le post qui maintient la relation.
		 *	Cascade Type signifie que c le Post est supprimé, tout les commentaires seront supprimés
		 **/
		
		@OneToMany(mappedBy="post", cascade=CascadeType.ALL)
		public List<Commentaire> commentaires;
		
		public Post(User a, String titre, String contenu) {
	        this.auteur = a;
	        this.titre = titre;
	        this.contenu = contenu;
	        this.datepost = new Date();
	    }
		
		public Post addComment(String auteur, String contenu, Date d) {
		    Commentaire newComment = new Commentaire(this, auteur, contenu, d);		    		
		    this.commentaires.add(newComment);
		    return this;
		}
		
		public static Finder<String, String> find=new Finder<String, String>(String.class, String.class);
		
}
